package com.gm.wj.controller;

import com.gm.wj.entity.SysTeacher;
import com.gm.wj.entity.User;
import com.gm.wj.result.Result;
import com.gm.wj.result.ResultFactory;
import com.gm.wj.service.SysTeacherService;
import com.gm.wj.service.UserService;
import com.gm.wj.util.SysLoging;
import com.gm.wj.util.VerifyUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

/**
 * @program: wj
 * @description: 教师
 * @author: Huang_shengjun
 * @create: 2020-09-16 22:36
 **/
@Log4j2
@RestController
@Api(tags = "教师管理相关接口")
public class SysTeacherController {

    @Autowired
    SysTeacherService sysTeacherService;
    @Autowired
    UserService userService;

    // 添加
    @PostMapping("api/admin/teacher")
    @SysLoging("添加教师信息") //根据SysLoging的注解信息，进行方法的注释
    @ApiOperation("添加教师信息的接口")
    public Result saveTeacher(@RequestBody @Valid SysTeacher sysTeacher, BindingResult bindingResult) {
        if (!VerifyUtils.isMobileNO(sysTeacher.getPhone())) {
            return ResultFactory.buildFailResult("手机号码格式错误！");
        }
        if (sysTeacher.getTeaNo().equals("")) {
            return ResultFactory.buildFailResult("学号不能为空！");
        }
        if (sysTeacher.getAddress().equals("")) {
            return ResultFactory.buildFailResult("地址不能为空！");
        }
        if (sysTeacher.getCreateTime().equals("")) {
            return ResultFactory.buildFailResult("入学时间不能为空！");
        }
        if (bindingResult.hasErrors()) {
            // 判断不为空
            log.error(bindingResult.getAllErrors());
            return ResultFactory.buildFailResult(bindingResult.getAllErrors().get(0).getDefaultMessage());
        }
        try{
            if (sysTeacherService.addOrUpdate(sysTeacher) == 1) {
                User user = new User();
                user.setUsername(sysTeacher.getUsername());
                user.setName(sysTeacher.getTeaName());
                user.setPhone(sysTeacher.getPhone());
                user.setEmail(sysTeacher.getEmail());
                user.setPassword("0774123");
                userService.register(user);
                return ResultFactory.buildSuccessResult("添加成功",null);
            }
            return ResultFactory.buildFailResult("添加失败，用户名已存在");
        } catch (Exception e){
            e.printStackTrace(); // 在控制台打印出异常种类，错误信息和出错位置等
            return ResultFactory.buildFailResult("服务器出错了，请联系管理员。错误信息：" + e.getMessage());
        }

    }

    // 修改
    @PutMapping("api/admin/teacher")
    @SysLoging("修改教师信息") //根据SysLoging的注解信息，进行方法的注释
    @ApiOperation("修改教师信息的接口")
    public Result updateTeacher(@RequestBody @Valid SysTeacher sysTeacher, BindingResult bindingResult) {
        try {
            sysTeacherService.update(sysTeacher);
            return ResultFactory.buildSuccessResult("添加成功",null);
        } catch (Exception e){
            e.printStackTrace(); // 在控制台打印出异常种类，错误信息和出错位置等
            return ResultFactory.buildFailResult("服务器出错了，请联系管理员。错误信息：" + e.getMessage());
        }
    }

    // 列表
    @PostMapping("/api/admin/teacher/{size}/{page}")
    @ApiOperation("查询教师列表信息的接口")
    @SysLoging("查询教师列表信息") //根据SysLoging的注解信息，进行方法的注释
    public Result listTeacher(@PathVariable("size") int size, @PathVariable("page") int page) {
        try{
            return ResultFactory.buildSuccessResult("查询成功",sysTeacherService.list(page - 1, size));
        } catch (Exception e){
            e.printStackTrace(); // 在控制台打印出异常种类，错误信息和出错位置等
            return ResultFactory.buildFailResult("服务器出错了，请联系管理员。错误信息：" + e.getMessage());
        }

    }

    // 更新启用状态
    @PutMapping("/api/admin/teacher/status")
    @ApiOperation("更新教师状态信息的接口")
    @SysLoging("更新教师状态信息") //根据SysLoging的注解信息，进行方法的注释
    public Result updateStatus(@RequestBody SysTeacher sysTeacher) {
        try {
            sysTeacherService.updateStatus(sysTeacher);
            return ResultFactory.buildSuccessResult("成功",null);
        }catch (Exception e){
            e.printStackTrace(); // 在控制台打印出异常种类，错误信息和出错位置等
            return ResultFactory.buildFailResult("服务器出错了，请联系管理员。错误信息：" + e.getMessage());
        }
    }

    // 根据id查询
    @GetMapping("/api/admin/teacher/{id}")
    @ApiOperation("根据id查询教师信息的接口")
    @SysLoging("根据id查询教师信息") //根据SysLoging的注解信息，进行方法的注释
    public Result getOneTeacher(@PathVariable("id") int id) {
        try{
            return ResultFactory.buildSuccessResult("查询成功",sysTeacherService.findById(id));
        }catch (Exception e){
            e.printStackTrace(); // 在控制台打印出异常种类，错误信息和出错位置等
            return ResultFactory.buildFailResult("服务器出错了，请联系管理员。错误信息：" + e.getMessage());
        }
    }

    // 删除
    @DeleteMapping("/api/admin/teacher/{id}")
    @ApiOperation("删除教师信息的接口")
    @SysLoging("删除教师信息")
    public Result deleteTeacher(@PathVariable("id") int id) {
        try{
            sysTeacherService.delete(id);
            return ResultFactory.buildSuccessResult("删除成功",null);
        }catch (Exception e){
            e.printStackTrace(); // 在控制台打印出异常种类，错误信息和出错位置等
            return ResultFactory.buildFailResult("服务器出错了，请联系管理员。错误信息：" + e.getMessage());
        }
    }

    // 根据条件查询用户列表
    @PostMapping("/api/admin/teacher/findByQueryKey")
    @ApiOperation("根据条件查询用户列表的接口")
    @SysLoging("根据条件查询用户列表")
    public Result listByQueryKey(String queryKey1,String queryKey2, String queryKey3) {
        try{
            return ResultFactory.buildSuccessResult("查询成功",sysTeacherService.listByQueryKey(queryKey1,queryKey2,queryKey3));
        }catch (Exception e){
            e.printStackTrace(); // 在控制台打印出异常种类，错误信息和出错位置等
            return ResultFactory.buildFailResult("服务器出错了，请联系管理员。错误信息：" + e.getMessage());
        }
    }
}
